The generation of perfect random numbers is increasingly important in computer applications. For instance, random numbers are used in connection with computer simulations of real world events, and in connection with encryption techniques. In particular, the increased need for the encryption of sensitive data has led to the need for long strings of high quality real random numbers, preferably generated within a short period of time.
At present, methods for the generation of pseudo-random numbers are available. Pseudo-random number generators generally must be provided with a random “seed” number. The pseudo-random number generator then applies the seed to an algorithm to create a series of numbers. The seed may be obtained from various inputs. For instance, the random seed may be derived from the time interval between user keystrokes on a computer keyboard. However, the series of numbers provided by a pseudo-random number generator is deterministic, and therefore predictable. In addition, the same series of numbers is generated if the same seed is used. Therefore, pseudo-random number generators are not ideal for use in connection with applications requiring or benefiting from the use of high quality real random numbers.
A perfect or real random number is a number selected from a set of numbers such that each number in the set has the same probability of being selected. Furthermore, a random number is unpredictable. Real random numbers may be derived from environmental noise. The generation of random numbers from environmental noise necessarily requires an interface with the environment. At present, random number generators, in the form of specialized hardware that convert environmental noise, such as noise from electrical or radioactive sources, to a digital signal and that can be interconnected to a computer, are available. However, the use of such hardware entails additional costs to the computer user, as the specialized hardware is not normally provided as part of a computer. In addition, such hardware requires an interface with the computer. Random number generators associated with certain computer processors are also available. For example, certain INTEL processors include an integrated random number generator. Such random number generators are believed to be capable of providing random bits at a rate of about 75 kbits/s. However, such processor-based random number generators are not widely available, and they typically require the provision of additional circuitry in the processor that is dedicated to the generation of random numbers.
Other methods for generating random numbers include measuring the time between key strokes entered by the user of a computer or the time required for the user of a computer to move a mouse from one position to another. The use of variations in the rotational velocity of a computer disk drive has also been proposed. However, such methods provide too low a rate of random number generation to be useful in connection with applications requiring long strings of random bits. For instance, the use of variations in the rotational speed of a disk drive, believed to be the fastest of these methods, produces only about 100 random bits per minute.
One application that benefits from long strings of random bits are encryption programs. The use of encryption programs to protect sensitive information is increasingly widespread, as computers are often used to store or transfer such information. In order to safeguard sensitive information from unauthorized access, various encryption techniques have been devised. In order to limit the ability of a cryptoanalyst, or hacker, to discern a pattern or deduce a key used to encrypt a particular set of data, real random numbers are necessary.
The encryption of computer data usually involves the “scrambling” of data using an algorithm and a key that is unique to the person or entity seeking to encrypt the data. The key, which is required to unencrypt the data, may be as many as several thousand bits long. However, to even encrypted data is vulnerable to unauthorized access, particularly where the algorithm or key used to encrypt the data can be narrowed down by a hacker, or cryptoanalyst, to a reduced number of possible keys. If a key can be chosen that is truly random, deducing the key will be much more difficult, as a hacker will be unable to discern a pattern to assist in the recreation of the key.
Other computer applications that can benefit from the use of real random numbers are games and simulations (like Monte Carlo algorithms) of natural phenomena. The use of real random numbers in connection with such applications aids in ensuring that the results obtained are free from any unintentional bias that may skew the results. Therefore, real random numbers can make games more enjoyable and less predictable, and can increase the usefulness of computer simulations.
It would be advantageous to provide a random number generator that produces a relatively large number of high quality real random numbers in a short period of time. In addition, it would be advantageous to provide a generator of high quality real random numbers that did not require the provision of hardware not normally included as part of a computer. Furthermore, it would be advantageous to provide a generator of high quality real random numbers that added little to the cost of a computer and that was reliable in operation.